package simple

import (
	"fmt"
	"gitee.com/youbeiwuhuan/gin-practice/go-validator/model"
	"github.com/go-playground/validator/v10"
)

func Simple() {
	/*

		validator.New() 用于创建一个新的验证器实例。这个函数可以接受一些配置选项来自定义验证行为。以下是主要的配置选项及其含义：

		主要配置选项
		SetTagName
		作用：设置用于验证的结构体标签名称
		默认值：validate
		示例：validate.SetTagName("valid") 将使用 valid 标签而不是 validate

		RegisterTagNameFunc
		作用：注册一个函数来自定义字段名称在错误消息中的显示方式
		示例：可以用来将字段名从驼峰式转为下划线式等

		SetValidationFunc
		作用：注册自定义验证函数
		示例：添加业务特定的验证逻辑

		RegisterAlias
		作用：为验证标签注册别名
		示例：validate.RegisterAlias("iscolor", "hexcolor|rgb|rgba|hsl|hsla")

		RegisterStructValidation
		作用：注册结构体级别的验证函数
		示例：需要跨字段验证时使用

		RegisterCustomTypeFunc
		作用：注册自定义类型处理函数
		示例：处理自定义类型或接口类型的验证

		SetValidatePrivateFields
		作用：设置是否验证私有字段（小写开头的字段）
		默认值：false

		SetRequiredStructEnabled
		作用：启用结构体级别的必需验证
		默认值：false



	*/
	validate := validator.New()
	// 自定义配置示例
	//validate.SetTagName("valid")
	user := model.User{Name: "John", Age: 250, Email: "john@example.com", Password: "password"}
	//基于结构体调用 err := validate.Struct(user) 来校验；
	//基于变量调用 errs := validate.Var(myEmail, "required,email")
	//校验全部字段
	//err := validate.Struct(user)
	// 只校验Name字段
	err := validate.StructPartial(user, "Name")
	// 校验除Name以外的字段
	//err := validate.StructExcept(user, "Name")
	if err != nil {
		// 处理验证失败的情况
		fmt.Println(err)
	} else {
		// 处理验证成功的情况
		fmt.Println("Validation passed")
	}
}

func Custom() {
	validate := validator.New()
	validate.RegisterValidation("not", func(fl validator.FieldLevel) bool {

		fmt.Println("-----------", fl.GetTag())
		fmt.Println("-----------", fl.Param())

		return true
	})

	user := model.Merchant{Phone: "32423"}
	err := validate.Struct(user)
	if err != nil {
		// 处理验证失败的情况
		fmt.Println(err)
	} else {
		// 处理验证成功的情况
		fmt.Println("Validation passed")
	}

}
